package cn.edu.sasu;

import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.RelativeLayout;
import android.widget.TabHost;
import cn.edu.sasu.domain.Users;
import cn.edu.sasu.utils.AnimationMove;

/**
 * 这个是一个TagActivity：当点击不同的标签（新闻、话题、图片、跟帖、我）的时候，显示不同的内容
 * @author yubaolinfish
 *
 */

/**
 * <p>
 TabActivity 
</p><p>
  首先Android里面有个名为TabActivity来给我们方便使用。其中有以下可以关注的函数：
  <ul>
  <li>
  public TabHost getTabHost ()  获得当前TabActivity的TabHost</li><li>
  public TabWidget getTabWidget () 获得当前TabActivity 的TabWidget</li><li>
  public void setDefaultTab (String tag) 这两个函数很易懂， 就是设置默认的Tab</li><li>
  public void setDefaultTab (int index)  通过tab名——tag或者index(从0开始)</li><li>
  protected void onRestoreInstanceState (Bundle state) 这 两个函数的介绍可以</li><li>
  protected void onSaveInstanceState (Bundle outState)参考 Activity的生命周期</li>
  </ul>
</p><p></p>
<p>
TabHost 
</p><p>
  那么我们要用到的Tab载体是TabHost，需要从TabActivity.getTabHost获取。<p/>
  现在看看TabHost类，它有3个内嵌类：1个类TabHost.TabSpec，2个接口 TabHost.TabContentFactory和TabHost.OnTabChangeListener。后面会介绍这些类和接口。
TabHost类的一些函数：
<ul><li>
  public void addTab (TabHost.TabSpec tabSpec) 添加 tab，参数TabHost.TabSpec通过下面的函数返回得到</li><li>
  public TabHost.TabSpec newTabSpec (String tag) 创 建TabHost.TabSpec</li><li>
  public void clearAllTabs () remove所有的Tabs</li><li>
  public int getCurrentTab () </li><li>
  public String getCurrentTabTag () </li><li>
  public View getCurrentTabView () </li><li>
  public View getCurrentView () </li><li>
  public FrameLayout getTabContentView ()返回Tab content的FrameLayout</li><li>
  public TabWidget getTabWidget () </li><li>
  public void setCurrentTab (int index)       设置当前的Tab by index</li><li>
  public void setCurrentTabByTag (String tag)设置当前的Tab by tag</li><li>
  public void setOnTabChangedListener (TabHost.OnTabChangeListener l) 设置TabChanged事件的响应处理</li><li>
  public void setup ()这个函数后面介绍</li></ul>
  </p><p>
  
TabHost.TabSpec 
  从上面的函数可以知道如何添加tab了，要注意，这里的Tag(标签)，不是Tab按钮上的文字。
  而要设置tab的label和content，需要设置TabHost.TabSpec类。 
  引用SDK里面的话——“A tab has a tab indicator, content, and a tag that is used to keep track of it.”，TabHost.TabSpec就是管理这3个东西：
  <ul><li>
  public String getTag () </li><li>
  public TabHost.TabSpec setContent </li><li>
  public TabHost.TabSpec setIndicator </li><ul>
  
我理解这里的Indicator就是Tab上的label，它可以
<ul><li>
  设置label ： setIndicator (CharSequence label) </li><li>
  或者同时设置label和icon ：setIndicator (CharSequence label, Drawable icon) </li><li>
  或者直接指定某个view ： setIndicator (View view) </li><li>
  对于Content ，就是Tab里面的内容，可以</li><li>
  设置View的id ： setContent(int viewId) </li><li>
  或者TabHost.TabContentFactory 的createTabContent(String tag)来处理：setContent(TabHost.TabContentFactory contentFactory)</li><li>
  或者用new Intent 来引入其他Activity的内容：setContent(Intent intent) </li><ul></p>
 */
@SuppressWarnings("deprecation")
public class MainActivity extends TabActivity {
	private TabHost tabHost;
	//private TabHost.TabSpec tabSpec;
	private RadioGroup radioGroup;
	private RelativeLayout bottom_layout;
	private ImageView img;//背景图片的具体的对象
	private int startX;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		bottom_layout = (RelativeLayout) findViewById(R.id.layout_bottom);

		tabHost = getTabHost();
		//点击不同的图标，跳转到不同的界面中
		//新闻
		//放在第一个会被默认的显示
		tabHost.addTab(tabHost.newTabSpec("news").setIndicator("News")
				.setContent(new Intent(this, NewsActivity.class)));
		//话题
		tabHost.addTab(tabHost.newTabSpec("topic").setIndicator("Topic")
				.setContent(new Intent(this, TopicActivity.class)));
		//图片
		tabHost.addTab(tabHost.newTabSpec("picture").setIndicator("Picture")
				.setContent(new Intent(this, PicActivity.class)));
		//跟帖
		tabHost.addTab(tabHost.newTabSpec("follow").setIndicator("Follow")
				.setContent(new Intent(this, CommentActivity.class)));
		//我
		tabHost.addTab(tabHost.newTabSpec("vote").setIndicator("Vote")
				.setContent(new Intent(this, MeActivity.class)));

		radioGroup = (RadioGroup) findViewById(R.id.radiogroup);
		radioGroup.setOnCheckedChangeListener(checkedChangeListener);//点击不同的时候，通过这个事件来处理

		img = new ImageView(this);//创建一个图片对象，背景图
		img.setImageResource(R.drawable.tab_front_bg);//为背景图对象设置图片
		bottom_layout.addView(img);//添加上这个图片
	}

	/**
	 * 点击相应单选按钮的时候，
	 */
	private OnCheckedChangeListener checkedChangeListener = new RadioGroup.OnCheckedChangeListener() {

		@Override
		public void onCheckedChanged(RadioGroup group, int checkedId) {
			switch (checkedId) {
			case R.id.radio_news://点击的是新闻的时候
				tabHost.setCurrentTabByTag("news");//切换显示的界面，通过TAG来指定
				AnimationMove.moveFrontBg(img, startX, 0, 0, 0);//开始动画，就是切换背景图片，从上一个位置移动到当前位置，只改变X轴的坐标，Y轴的坐标不变
				startX = 0;//把当前标识的背景图片的左上角的X轴的值记录下来,这个值是大于零的
				break;
			case R.id.radio_topic://话题
				tabHost.setCurrentTabByTag("topic");
				AnimationMove.moveFrontBg(img, startX, img.getWidth(), 0, 0);
				startX = img.getWidth();
				break;
			case R.id.radio_pic://图片
				tabHost.setCurrentTabByTag("picture");
				AnimationMove.moveFrontBg(img, startX, img.getWidth() * 2, 0, 0);//img.getWidth() * 2：表示的是当前的View的最右的X坐标
				startX = img.getWidth() * 2;
				break;
			case R.id.radio_follow://跟帖
				tabHost.setCurrentTabByTag("follow");
				AnimationMove.moveFrontBg(img, startX, img.getWidth() * 3, 0, 0);
				startX = img.getWidth() * 3;
				break;
			case R.id.radio_vote://我
				tabHost.setCurrentTabByTag("vote");
				AnimationMove.moveFrontBg(img, startX, img.getWidth() * 4, 0, 0);
				startX = img.getWidth() * 4;
				break;

			}
		}
	};

	
	
	@Override
	protected void onDestroy() {
		Users.setUser(null);
		super.onDestroy();
	}
}